1. Technical Field
The present disclosure relates to software development and, more specifically, to a system and method for version control for software development.
2. Description of the Related Art
Software development processes routinely utilize programmers working on medium to large projects to concentrate on a particular area of software development according to their specialization (e.g. different people may be modifying documentation and programming language code). Even if the same programmer modifies several files, temporal inconsistencies in the code repository may exist until the modified files are checked in. In the software production environment, these individual pieces of software are often referred to as “deliverables.” When all deliverables have been developed, they may be integrated into a distribution image. The distribution image may include all of the compiled code and related files, such as for example scripts, configuration files, man pages, etc. that come together to form the finished software package. The distribution image may then be distributed to customers and/or sent to a quality assurance (QA) team to verify that the distribution image functions properly.
However, because deliverables undergo frequent modification and/or update, ensuring complete compatibility amongst deliverables is a constant challenge. Because deliverables may have multiple interdependencies, changes to one deliverable may necessitate subsequent changes to one or more of the other deliverables to settle the interdependencies.
As each deliverable may undergo frequent revision, matching up the correct versions of deliverables represents a perpetual challenge to software developers. A distribution with one or more mismatched deliverables may be inoperable or may function unpredictably. Such a distribution may be called a broken distribution image. Broken distribution images may be categorized as an inconsistent build, for example where a recently added feature is missing from one or more deliverables, or for example where an old discontinued deliverable is still present in the distribution image, etc.
Software developers therefore invest substantial time and effort in resolving inconsistent builds and/or in meeting accepted quality standards, for example ISO 9001 compliant development processes. QA departments may be required to direct many scarce resources towards the very time-consuming and tedious task of resolving inconsistent builds. It is therefore desirable to utilize a system and method for automatically ensuring operative builds.
Presently available techniques for ensuring operative builds may be used to ensure that compiled deliverables are properly matched. For example, ifdef-based preprocessing controls may be used to allow particular features of deliverables to lie dormant within source code and either be included or excluded from the compiled object code depending on whether the particular features are compatible with the current build. In this way it is ensured that each compiled deliverable is compatible with the current build.
However, software packages are not limited to compiled deliverables. Many non-compiled deliverables such as, for example, scripts, XML, HTML, documents, multi-media files, and the like, are used alone and/or in conjunction with compiled deliverables to form a distribution image. These non-compiled deliverables may also share interdependency with each other and/or compiled deliverables.
Without some kind of arrangement that excludes work-in-progress files from participating in a build, a build may have to be postponed until some future time when all changes are in. One possible arrangement is to keep backups of files made before modifications have started and using them for builds while their copies are being updated. However, this solution is rather cumbersome and is otherwise disadvantageous.
It is therefore desirable to utilize a system and method for ensuring the operability of distribution images that may include compiled and/or non-compiled deliverables.